

#include "atomic_op_asm.h"

	.text

LEAF(_atomic_swap_32, 2)
1:	ldl_l	v0, 0(a0)
	mov	a1, t2
	stl_c	t2, 0(a0)
	beq	t2, 2f
	RET
2:	br	1b
	END(_atomic_swap_32)
ATOMIC_OP_ALIAS(atomic_swap_32,_atomic_swap_32)
ATOMIC_OP_ALIAS(atomic_swap_uint,_atomic_swap_32)
STRONG_ALIAS(_atomic_swap_uint,_atomic_swap_32)

LEAF(_atomic_swap_64, 2)
1:	ldq_l	v0, 0(a0)
	mov	a1, t2
	stq_c	t2, 0(a0)
	beq	t2, 2f
	RET
2:	br	1b
	END(_atomic_swap_64)
ATOMIC_OP_ALIAS(atomic_swap_64,_atomic_swap_64)
ATOMIC_OP_ALIAS(atomic_swap_ulong,_atomic_swap_64)
STRONG_ALIAS(_atomic_swap_ulong,_atomic_swap_64)
ATOMIC_OP_ALIAS(atomic_swap_ptr,_atomic_swap_64)
STRONG_ALIAS(_atomic_swap_ptr,_atomic_swap_64)
